package com.cy.pj.common.pool;

import org.springframework.context.annotation.Lazy;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;

/*构建一个对象池类型, 将此类型的对象讲给spring管理
* 因为是一个对象池, 所以使用单例模式,   不是立即就是用, 就进行延迟加载
*
* 构建 : 池化思想    模式 : 享元模式
* */
@Lazy       //懒加载(延迟加载):   在创建的时候才加载, 不会在spring框架加载时创建(配合单例模式使用)
//@Component("ol")        //bean中的名字为 ol
//@Scope("prototype")     //多例模式,   不会在spring中加载, 何时创建,何时加载,  每次都会创建一个新的对象
@Component  //bean中的名字为 objectPool(类名首字母小写)
public class ObjectPool {
//    定义无参构造对象,   用来监控spring何时创建对象
    public ObjectPool() {
        System.out.println("ObjectPool.ObjectPool");
    }

    @PostConstruct
//    创建对象后 执行
    public void init(){//生命周期初始化方法, 构造方法执行结束后执行
        System.out.println("ObjectPool.init");
        System.out.println("abcasdasdasd");
    }

    @PreDestroy
//    销毁对象后执行
    public void destory(){//生命周期销毁方法, 对象从容器销毁前执行
        System.out.println("ObjectPool.destory");
    }

//    为什么把 bean 交给Spring 处理


}